/**
 *面试题 17.04. 消失的数字
 */
class Solution {
    public int missingNumber(int[] nums) {
        //2.异或
        int ans = 0;
         for (int i = 0;i<nums.length;i++){
            ans^=nums[i];
            //ans ^= i;
        }
        //3.一个循坏异或
        // ans ^= nums.length ---> i < nums.length  少一个数字
        //return ans;
        //可以少一个循坏
          for (int i = 1;i<=nums.length;i++){
            ans ^= i;
        }
       
      
        return ans;
    }
}

// 1.相加 相减

    /*  int num = 0;
        int ans = 0;
        for(int i = 0;i<nums.length;i++){
            num += nums[i];
        }
        for (int i = 0;i<=nums.length;i++){
            ans += i;
        }
        return ans - num;
        */


/**
 * 189. 轮转数组
 */
class Solution2 {
//2. 空间复杂度O(1)

    public void rotate(int[] n, int k) {
        int len = n.length;
        if (len < 2 || k % len == 0) return;  // 没必要翻转
        k = k%len;   // 旋转次数等于数组长度 相当于没有旋转
        reserve(n,0,len-1);//整体旋转
        reserve(n,0,k-1);//旋转k前部分
        reserve(n,k,len-1);//旋转k后部分
    }
    public void reserve(int[] num, int i, int j){
        while (i < j){
            int t = num[i];
            num[i] = num[j];
            num[j] = t;
            i++;
            j--;
        }
    }

}



//1.
    /*  int len = n.length;
        int[] ret = new int[len];
        for (int i = 0;i<len;i++){
            ret[i] = n[i];
        }
         for (int i = 0;i<len;i++){
            n[(i+k)%len] = ret[i];
        }
        */